SQL 기본정보

데이터 유형

데이터베이스에서 사용하는 데이터 유형은 다양한 형태로 제공된다. 벤더별로 SQL 문장의 차이는 적어지고 있지만, 데이터 유형과 내장 함수 부분에서는 차이가 많은 편이다.

CHARACTER(s)

  • 고정길이 문자열
  • s만큼의 길이를 갖고 할당된 변수값의 길이가 s보다 작은 경우 그 차이 만큼을 공백으로 채운다.
  • Oracle 1 Byte <= s <= 2,000 Byte
  • SQL Server 1 Byte <= s <= 8,000 Byte

VARCHAR(s)

  • 가변길이 문자열(Oracle의 경우 VARCHAR2로 표현)
  • s만큼의 길이를 가질 수 있으나 가변길이로 조정되므로 할당된 변수값의 Byte크기를 갖는다.
  • Oracle 1 Byte <= s <= 4,000 Byte
  • SQL Server 1 Byte <= s <= 8,000 Byte

NUMERIC

  • 정수, 실수 등 숫자정보
  • Oracle NUMBER e.g. NUMBER(9, 3)
  • SQL Server NUMERIC, DECIMAL, DEC, SMALLINT, INTEGER, INT, BIGINT, FLOAT, REAL, DOUBLE PRECISION

DATE

  • 날짜와 시간 정보
  • 데이터베이스는 날짜 저장시 Century, Year, Month, Day, Hours, Minutes, Seconds와 같은 숫자 형식으로 변환하여 저장하므로 산술 연산이 가능하다.
  • Oracle 1s 단위 관리
  • SQL Server 3.33ms 단위 관리
SELECT SYSDATE - 1            FROM DAUL; -- 1일전
SELECT SYSDATE - 1/24 FROM DAUL; -- 1시간전
SELECT SYSDATE - 1/(24*60) FROM DUAL; -- 1분전
SELECT SYSDATE - 1/24/60 FROM DUAL; -- 1분전
SELECT SYSDATE - 1/(24*60*60) FROM DUAL; -- 1초전
SELECT SYSDATE - 1/24/60/60 FROM DUAL; -- 1초전


연산자

WHERE 절에 사용되는 연산자는 다음과 같다.

연산자 종류

산술연산자 +, -, *, /
비교연산자 =, >, >=, <, <=
SQL연산자 BETWEEN, IN, LIKE, IS NULL
부정비교연산자 !=, ^=, <>, NOT
부정SQL연산자 NOT BETWEEN, NOT IN, IS NOT NULL

연산자 우선순위

  • 괄호로 묶은 연산이 제일 먼저 처리된다.
  • 연산자들 중 NOT연산자가 먼저 처리되고,
  • 비교연산자(=, >, >=, <, <=), SQL비교연산자(BETWEEN, IN, LIKE, IS NULL)가 처리되고,
  • 논리연산자 중에서는 AND, OR의 순으로 처리된다.


문자 비교방법

비교연산자의 양쪽 모두 CHAR 타입인 경우

  • 길이가 서로 다르면 짧은 쪽에 공백을 추가하여 길이를 같게 한 후 비교한다.
  • 서로 다른 문자가 나올때까지 비교한다.
  • 양쪽이 서로 다른 첫 번째 문자의 값에 따라 크기를 결정한다.
  • 공백의 수만 다르다면 서로 같은 값으로 결정한다.

비교연산자의 어느 한 쪽이 VARCHAR 타입인 경우

  • 서로 다른 문자가 나올 때까지 비교한다.
  • 길이가 다르면 짧은 쪽이 끝날때까지만 비교한 후, 길이가 긴 것이 크다고 판단한다.
  • 길이가 같고 다른 것이 없다면 같다고 판단한다.

상수값과 비교

  • 상수쪽을 변수타입과 동일하게 바꾸고 비교한다.
  • 변수쪽이 CHAR 타입이면 위의 CHAR 타입의 경우를 적용한다.
  • 변수쪽이 VARCHAR 타입이면 위의 VARCHAR 타입의 경우를 적용한다.
/* (COLUMN NAME) HEIGHT    */
/* (COLUMN TYPE) NUMBER(3) */
SELECT * FROM TEAM
WHERE HEIGHT >= '170' --상수쪽('170')을 변수타입(NUMBER)에 맞춰 변경 후 비교한다.


내장 함수(Built-In Function)

내장 함수는 벤더별로 가장 큰 차이를 보이는 부분이지만, 핵심적인 기능들은 이름이나 표현법이 다르더라도 대부분의 데이터베이스가 공통적으로 제공하고 있다. 내장 함수는 다음과 같이 나눌 수 있다.

내장 함수의 분류

  • 단일행 함수(Single-row Function): 문자형, 숫자형, 날짜형, 변환형, NULL 관련 함수
  • 다중행 함수(Multi-row Function)
    • 집계 함수(Aggregate Function)
    • 그룹 함수(Group Function)
    • 윈도우 함수(Window Function)

문자형 함수

함수 설명
LOWER(s) 문자열 s를 소문자로 변환한다.
UPPER(s) 문자열 s를 대문자로 변환한다.
ASCII(s) 문자열 s의 ASCII 코드값을 반환한다.
CHR(ASCII) ASCII 코드값을 문자/숫자로 변환한다.
CONCAT(s1, s2) 문자열 s1, 문자열 s2의 연결값을 반환한다.
SUBSTR(s, m, n) 문자열 s의 m위치에서 n개의 문자길이를 반환한다.
LENGTH(s) 문자열 s의 길이를 반환한다.
LTRIM(s [, n]) 문자열 s의 첫 문자부터 확인해서 n이 나타나면 해당 문자를 제거한다.
SQL Server의 경우 LTRIM()은 공백만 제거할 수 있다.
RTRIM(s [, n]) 문자열 s의 마지막 문자부터 확인해서 n이 나타나면 해당 문자를 제거한다.
SQL Server의 경우 RTRIM()은 공백만 제거할 수 있다.
TRIM(s) LTRIM()과 RTRIM()을 결합한 형태이다.

숫자형 함수

함수 설명
ABS(n) n의 절대값을 반환한다.
MOD(n, m) n을 m으로 나눈 나머지 값을 반환한다.
ROUND(n, m) n을 소수점 m+1자리에서 반올림한다.
TRUNC(n, m) n을 소수점 m+1자리에서 절사한다.
SIGN(n) n값이 양수, 음수, 0인지를 구분한다.
CEIL(n) n보다 크거나 같은 최소 정수를 반환한다. e.g. CEIL(38.123) = 39
FLOOR(n) n보다 작거나 같은 최대 정수를 반환한다. e.g. FLOOR(-38.123) = -39
EXP(n) n의 지수값을 반환한다.
POWER(n) n의 거듭제곱값을 반환한다.
SQRT(n) n의 제곱근값을 반환한다.
LOG(n) n의 로그 값을 반환한다.
LN(n) n의 자연로그 값을 반환한다.

날짜형 함수

  • 데이터베이스는 날짜를 숫자로 저장하기 때문에 덧셈, 뺄셈 같은 산술연산도 가능하다.
함수 설명
SYSDATE 현재 날짜와 시각을 출력한다.
EXTRACT( ) 날짜(DATE) 정보에서 년/월/일을 출력한다. (시/분/초도 가능)
TO_NUMBER(TO_CHAR(d, ‘YYYYMMDD’) 날짜(DATE) 정보에서 년/월/일을 출력한다.
SELECT ENAME, HIREDATE,
EXTRACT(YEAR FROM HIREDATE),
EXTRACT(MONTH FROM HIREDATE),
EXTRACT(DAY FROM HIREDATE),
TO_NUMBER(TO_CHAR(HIREDATE, 'YYYY')),
TO_NUMBER(TO_CHAR(HIREDATE, 'MM')),
TO_NUMBER(TO_CHAR(HIREDATE, 'DD'))
FROM EMP;

변환형 함수

  • 명시적(Explict) 변환: 함수로 데이터 유형을 변환하도록 명시해주는 경우이다.
  • 암시적(Implict) 변환: 데이터베이스가 자동으로 데이터 유형을 변환하여 계산하는 경우로, 성능 저하가 발생할 수 있다.
함수 설명
TO_NUMBER(s) 문자열 s를 숫자로 변환한다.
TO_CHAR(num│date [,FORMAT]) 숫자/날짜를 주어진 포맷의 문자열 형태로 변환한다.
TO_DATE(s [,FORMAT]) 문자열 s를 주어진 포맷의 날짜 형태로 변환한다.

NULL 관련 함수

  • NULL 값은 0 또는 공백과는 다르다.
  • NULL 값이 포함된 연산은 그 결과값도 NULL이다.
함수 설명
NVL(e1, e2) 표현식 e1의 결과값이 NULL이면 e2의 값을 출력한다.
NULLIF(e1, e2) 표현식 e1이 표현식 e2와 같으면 NULL, 같지 않으면 e1을 반환한다.
COALESCE(e1, e2, …) e1, e2, …에서 NULL이 아닌 최초의 표현식을 반환한다. 모두 NULL이면 NULL을 반환한다.

집계함수

함수 설명
COUNT(*) NULL 값을 포함한 행의 수를 출력한다.
COUNT(col), COUNT(*) col의 값 중 NULL은 제외한 행의 수를 출력한다.
SUM([DISTINCT│ALL] col) col의 NULL 값을 제외한 합계를 구한다.
AVG([DISTINCT│ALL] col) col의 NULL 값을 제외한 평균을 구한다.
MAX([DISTINCT│ALL] col) col의 최대값을 구한다.
MIN([DISTINCT│ALL] col) col의 최소값을 구한다.
STDDEV([DISTINCT│ALL] col) col의 표준편차를 구한다.
VARIAN([DISTINCT│ALL] col) col의 분산을 구한다.
Share